package request;


import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.InputStream;

@WebServlet("/form-data-servlet")
@MultipartConfig//form-data格式需要使用这个注解
public class FormDataServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //request.getParameter也可以获取form-data中的简单类型数据
        req.setCharacterEncoding("utf-8");//设置body解析的编码格式
        System.out.println("username:" + req.getParameter("username"));
        System.out.println("password:" + req.getParameter("password"));
        //form-data中上传的文件，需要通过getPart来获取，getParameter无法获取
        //简单类型的数据其实也可以使用getpart获取，但是还需要调用part对象api来获取内容，比较复杂
        //System.out.println("head[文件无法通过getParameter获取]:" + req.getParameter("111"));
        Part head = req.getPart("head");
//      //获取上传文件的二进制数据，转换为字符串打印
//      InputStream is = head.getInputStream();//获取输入流（里面包含了数据）
//      //了解：输入流.available返回包含的数据长度
//      byte[] bytes = new byte[is.available()];//获取长度
//      //从输入流中，把数据读取到byte[]中，字节数组对象就有了这些数据
//      is.read(bytes);
//      System.out.println(new String(bytes,"utf-8"));

        //直接把客户端上传的文件，保存在服务端本地：不能使用上边代码读取后再保存
        //了解：getSubmittedFileName是获取上传文件的名称，注意：如果这个路径已经有这个文件，再上传就会报错。
        head.write("D://" + head.getSubmittedFileName());
    }
}
